home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESMISC.I < prev    next >
Encoding:
Modula Implementation  |  1994-01-17  |  10.2 KB  |  354 lines

  1. IMPLEMENTATION MODULE AESMisc;
  2. (*$L-, N+, Y+*)
  3.  
  4. (*  MEGAMAX MODULA 2 GEM-Library :  Verschiedene AES Funktionen         *
  5.  *                                                                      *
  6.  *  Autor: Manuel Chakravarty           Erstellt :  05.11.87            *
  7.  *                                                                      *
  8.  *  Version   2.2     V#0051                                            *)
  9.  
  10. (*  05.11.87    | Übernahme von 'GEMBase' und 'GEMExt'
  11.  *  14.01.88    | Erweiterung um 'ShellGet' und 'ShellPut'
  12.  *  26.07.88    | 'getNoElements' liefert jetzt 'HIGH (..) + 1', statt
  13.  *              | 'HIGH (..)'
  14.  *  20.08.89    | 'SelectFileExteded' def. + impl.
  15.  *  08.09.89 TT | 'ShellFind' korrigiert; kein Überlauf bei ShellRead;
  16.  *                ShellRead/Write konvertieren Längenbyte bei TAIL (cmdline);
  17.  *                ShellWrite hat nicht mehr den 3. Parameter f. Wahl, ob
  18.  *                Prg als Sub-Prozeß oder nach Prg-Ende gestartet werden soll.
  19.  *  ???????? TT | REF-Parm.
  20.  *  02.04.90    | Anpassung auf public arrays
  21.  *  17.01.94 TT | FindApplication korrigiert (jetzt Null-Byte hinter Namen).
  22.  *)
  23.  
  24.  
  25. FROM    SYSTEM  IMPORT ASSEMBLER, BYTE;
  26.  
  27. IMPORT  GEMShare;
  28.  
  29. (*$I GEMOPS.ICL *)
  30.  
  31.  
  32. (*  getNoElements -- geg.: 'high'=HIGH(...) und 'userNo' Angabe über Anzahl  *
  33.  *                         zu benutzender Elemente.                          *
  34.  *                   ges.: 'D0=userNo', falls '(userNo<high) und (userNo#0)' *
  35.  *                         'D0=high + 1'  , sonst.                           *
  36.  *                                                                           *
  37.  *       !!!!  Nur von Assemblerroutinen zu benützen  !!!!                   *)
  38.                 
  39. PROCEDURE getNoElements(high,userNo:CARDINAL);
  40.  
  41. BEGIN
  42.   ASSEMBLER
  43.         MOVE.W  -(A3),D0        ; 'userNo' -> D0
  44.         MOVE.W  -(A3),D1
  45.         ADDQ.W  #1,D1           ; 'high + 1'   -> D1
  46.         TST.W   D0
  47.         BEQ     cont2           ; springe, falls 'userNo=0'
  48.         CMP.W   D0,D1
  49.         BGE     cont            ; springe, falls 'high>=userNo'
  50. cont2
  51.         MOVE.W  D1,D0           ; 'high' -> D0
  52. cont
  53.   END;
  54. END getNoElements;
  55.  
  56.  
  57.                 (*  Application Manager  *)
  58.                 (*  ===================  *)
  59.                 
  60. PROCEDURE ReadFromAppl(id:CARDINAL;VAR buffer:ARRAY OF BYTE;noBytes:CARDINAL);
  61.  
  62. BEGIN
  63.   ASSEMBLER
  64.     MOVE.L      pubs,A0
  65.     JSR         getNoElements
  66.     MOVE.W      D0,pubArrays.aINTIN+2(A0)
  67.     MOVE.L      -(A3),pubArrays.ADDRIN(A0)
  68.     MOVE.W      -(A3),pubArrays.aINTIN(A0)
  69.     MOVE.W      #APPL_READ,(A3)+
  70.     JSR         aes_if
  71.     JSR         testINTOUT0
  72.   END;
  73. END ReadFromAppl;
  74.         
  75. PROCEDURE WriteToAppl(id:CARDINAL;REF message:ARRAY OF BYTE;noBytes:CARDINAL);
  76.         
  77. BEGIN
  78.   ASSEMBLER
  79.     MOVE.L      pubs,A0
  80.     JSR         getNoElements
  81.     MOVE.W      D0,pubArrays.aINTIN+2(A0)
  82.     MOVE.L      -(A3),pubArrays.ADDRIN(A0)
  83.     MOVE.W      -(A3),pubArrays.aINTIN(A0)
  84.     MOVE.W      #APPL_WRITE,(A3)+
  85.     JSR         aes_if
  86.     JSR         testINTOUT0
  87.   END;
  88. END WriteToAppl;
  89.         
  90. PROCEDURE FindApplication(REF fname:ARRAY OF CHAR;
  91.                           VAR id:CARDINAL;VAR success:BOOLEAN);
  92.  
  93. BEGIN
  94.   ASSEMBLER
  95.     CLR.W       -(A7)           ; Bytes hinter Namen löschen
  96.     SUBQ.L      #8,A7           ; reserviere weitere 8 Byte auf dem A7
  97.     MOVE.L      A7,A2
  98.     MOVE.L      -(A3),-(A7)
  99.     MOVE.L      -(A3),-(A7)
  100.     MOVE.W      -(A3),D0        ; HIGH(fname) -> D0
  101.     CMP.W       #7,D0
  102.     BLE         cont4           ; IF HIGH(fname)>7 THEN D0:=7
  103.     MOVEQ       #7,D0
  104. cont4
  105.     MOVE.L      -(A3),A0
  106.     MOVE.L      A2,A1           ; ADR(stackBuffer) -> A1
  107.     MOVE.W      D0,D1           ; D0(Anzahl der Zeichen) -> D1 (Zähler)
  108. loop
  109.     MOVE.B      (A0)+,(A1)+
  110.     DBEQ        D1,loop         ; Zeichen -> stackBuffer, bis #0 oder Zählerende
  111.     BNE         cont2           ; Letztes Zeichen #0, dann Zeichen ignorieren
  112.     SUBQ.L      #1,A1
  113. cont2
  114.     ADDQ.W      #7,D1
  115.     SUB.W       D0,D1           ; (7- Anzahl übertragener Zeichen) -> D1
  116.     BMI         cont3
  117.     MOVEQ       #' ',D0         ; Füllzeichen ist <Space>
  118. loop2
  119.     MOVE.B      D0,(A1)+
  120.     DBF         D1,loop2        ; Auf acht Zeichen auffüllen
  121. cont3
  122.     MOVE.L      pubs,A0       ; Auruf von 'APPL_FIND' mit ADDRESS(stackBuffer)
  123.     MOVE.L      A2,pubArrays.ADDRIN(A0)
  124.     MOVE.W      #APPL_FIND,(A3)+
  125.     JSR         aes_if
  126.     CLR.W       D1
  127.     MOVE.L      pubs,A0
  128.     MOVE.W      pubArrays.aINTOUT(A0),D0
  129.     SMI         D1
  130.     ADDQ.B      #1,D1
  131.     MOVE.L      (A7)+,A1
  132.     MOVE.W      D0,(A1)         ; id := pubs^.aINTOUT[0]
  133.     MOVE.L      (A7)+,A1
  134.     MOVE.W      D1,(A1)         ; success := (pubs^.aINTOUT[0]>=0)
  135.     ADDA.W      #10,A7          ; 'stackBuffer' freigeben
  136.   END;
  137. END FindApplication;
  138.  
  139.  
  140. PROCEDURE PlayEvents (REF buffer:ARRAY OF RecordedEvent; no:CARDINAL;
  141.                       scale:CARDINAL);
  142.                       
  143. BEGIN
  144.   ASSEMBLER
  145.         MOVE.L  pubs,A0
  146.         MOVE.W  -(A3),pubArrays.aINTIN+2(A0)
  147.         JSR     getNoElements
  148.         MOVE.L  pubs,A0
  149.         MOVE.W  D0,pubArrays.aINTIN(A0)
  150.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)
  151.         MOVE.W  #APPL_TPLAY,(A3)+
  152.         JSR     aes_if
  153.   END;
  154. END PlayEvents;
  155.  
  156. PROCEDURE RecordEvents (VAR buffer:ARRAY OF RecordedEvent; no:CARDINAL;
  157.                         VAR recorded: CARDINAL);
  158.  
  159. BEGIN
  160.   ASSEMBLER
  161.         MOVE.L  -(A3),-(A7)
  162.         
  163.         JSR     getNoElements
  164.         MOVE.L  pubs,A0
  165.         MOVE.W  D0,pubArrays.aINTIN(A0)
  166.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)
  167.         MOVE.W  #APPL_TRECORD,(A3)+
  168.         JSR     aes_if
  169.         
  170.         MOVE.L  (A7)+,A1
  171.         MOVE.L  pubs,A0
  172.         MOVE.W  pubArrays.aINTOUT(A0),(A1)
  173.   END;
  174. END RecordEvents;
  175.  
  176.         
  177.                 (*  File Selector Manger  *)
  178.                 (*  ====================  *)
  179.         
  180. PROCEDURE SelectFile (VAR path, name: ARRAY OF CHAR; VAR ok: BOOLEAN);
  181.  
  182.   BEGIN
  183.     ASSEMBLER
  184.         JMP     selectFile
  185.     END;
  186.   END SelectFile;
  187.  
  188. PROCEDURE SelectFileExtended (REF     label     : ARRAY OF CHAR;
  189.                               VAR path, name: ARRAY OF CHAR;
  190.                               VAR ok        : BOOLEAN);
  191.  
  192.   BEGIN
  193.     ASSEMBLER
  194.         JMP     selectFileExtended
  195.     END;
  196.   END SelectFileExtended;
  197.  
  198.  
  199.                 (*  Scrap Manager  *)
  200.                 (*  =============  *)
  201.  
  202. PROCEDURE ReadScrapDir(VAR dir:ARRAY OF CHAR);
  203.  
  204. BEGIN
  205.   ASSEMBLER
  206.     MOVE.L      pubs,A0
  207.     TST.W       -(A3)           ; Falls Max. des Scrap Eintrag bekannt wird
  208.                                 ; dann abtesten ob HIGH(dir)>= Max.
  209.     MOVE.L      -(A3),pubArrays.ADDRIN(A0)
  210.     MOVE.W      #SCRP_READ,(A3)+
  211.     JSR         aes_if
  212.     JSR         testINTOUT0
  213.   END;
  214. END ReadScrapDir;
  215.          
  216. PROCEDURE WriteScrapDir(REF dir:ARRAY OF CHAR);
  217.  
  218. BEGIN
  219.   ASSEMBLER
  220.         JSR     stringIntoCFormat
  221.         MOVE.L  pubs,A0
  222.         MOVE.L  D2,pubArrays.ADDRIN(A0)
  223.         MOVE.W  #SCRP_WRITE,(A3)+
  224.         JSR     aes_if
  225.         MOVE.L  (A7),A7
  226.   END;
  227. END WriteScrapDir;
  228.  
  229.  
  230.                 (*  Shell Manager  *)
  231.                 (*  =============  *)
  232.  
  233. PROCEDURE ShellRead (VAR cmd, tail: ARRAY OF CHAR);
  234.  
  235.   BEGIN
  236.     ASSEMBLER
  237.         JMP     shellRead
  238.     END;
  239.   END ShellRead;
  240.   
  241. PROCEDURE ShellWrite(start: BOOLEAN;isGraf:ProgramType;
  242.                      REF cmd,tail:ARRAY OF CHAR);
  243.                      
  244. BEGIN
  245.   ASSEMBLER
  246.         MOVE.L  pubs,A0
  247.  
  248.         ; TAIL muß Längenbyte am Anfang bekommen
  249.         SUBA.W  #$100,A7
  250.         MOVE.L  A7,pubArrays.ADDRIN+4(A0)
  251.         MOVE    -(A3),D2
  252.         MOVE.L  -(A3),A2
  253.         LEA     1(A7),A1
  254.         MOVEQ   #0,D1
  255.       L ADDQ    #1,D1
  256.         MOVE.B  (A2)+,(A1)+
  257.         DBEQ    D2,L
  258.         BNE     M
  259.         SUBQ    #1,D1
  260.       M MOVE.B  D1,(A7)
  261.  
  262.         JSR     stringIntoCFormat
  263.         MOVE.L  pubs,A0
  264.         MOVE.L  D2,pubArrays.ADDRIN(A0)
  265.         MOVE.W  #1,pubArrays.aINTIN+4(A0)       ; unbenutzt - immer EINS!
  266.         MOVE.W  -(A3),pubArrays.aINTIN+2(A0)
  267.         MOVE.W  -(A3),D0
  268.         MOVE.L  our_cb, A1
  269.         CMPI.W  #$140,cb.GLOBAL.ap_version(A1)
  270.         BCC     ok
  271.         MOVEQ   #1,D0
  272.      ok MOVE    D0,pubArrays.aINTIN(A0)
  273.         MOVE.W  #SHEL_WRITE,(A3)+
  274.         JSR     aes_if
  275.         MOVE.L  (A7),A7         ; Strings vom Stack entfernen
  276.         ADDA.W  #$100,A7
  277.         JSR     testINTOUT0
  278.   END;
  279. END ShellWrite;
  280.                      
  281. PROCEDURE ShellGet (VAR buffer:ARRAY OF BYTE; no:CARDINAL);
  282.  
  283. BEGIN
  284.   ASSEMBLER
  285.         JSR     getNoElements
  286.         MOVE.L  pubs,A0
  287.         MOVE.W  D0,pubArrays.aINTIN(A0)
  288.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)
  289.         MOVE.W  #SHEL_GET,(A3)+
  290.         JSR     aes_if
  291.         JSR     testINTOUT0
  292.   END;
  293. END ShellGet;
  294.  
  295. PROCEDURE ShellPut (REF buffer:ARRAY OF BYTE; no:CARDINAL);
  296.  
  297. BEGIN
  298.   ASSEMBLER
  299.         JSR     getNoElements
  300.         MOVE.L  pubs,A0
  301.         MOVE.W  D0,pubArrays.aINTIN(A0)
  302.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)
  303.         MOVE.W  #SHEL_PUT,(A3)+
  304.         JSR     aes_if
  305.         JSR     testINTOUT0
  306.   END;
  307. END ShellPut;
  308.  
  309. PROCEDURE ShellFind(VAR name:ARRAY OF CHAR);
  310.  
  311. BEGIN
  312.   ASSEMBLER
  313.         MOVE.W  -2(A3),-(A7)
  314.         MOVE.L  -6(A3),-(A7)
  315.         JSR     stringIntoCFormat
  316.         MOVE.L  D2,-(A7)
  317.         
  318.         MOVE.L  pubs,A0
  319.         MOVE.L  D2,pubArrays.ADDRIN(A0)
  320.         MOVE.W  #SHEL_FIND,(A3)+
  321.         JSR     aes_if
  322.         JSR     testINTOUT0
  323.  
  324.         MOVE.L  (A7)+,A1        ; ADR (String auf dem Stack) -> A1
  325.         MOVE.L  (A7)+,A2        ; neuer A7
  326.         MOVE.L  (A2)+,A0        ; ADR (name) -> A0
  327.         MOVE.W  (A2)+,D0        ; HIGH (name) -> D0
  328. loop
  329.         MOVE.B  (A1)+,(A0)+
  330.         DBEQ    D0,loop
  331.         MOVE.L  A2,A7
  332.   END;
  333. END ShellFind;
  334.  
  335. PROCEDURE ShellEnvironment(REF param:ARRAY OF CHAR;VAR value:ARRAY OF CHAR);
  336.         
  337. BEGIN
  338.   ASSEMBLER
  339.         MOVE.L  pubs,A0
  340.         TST.W   -(A3)
  341.         MOVE.L  -(A3),pubArrays.ADDRIN(A0)
  342.         JSR     stringIntoCFormat
  343.         MOVE.L  pubs,A0
  344.         MOVE.L  D2,pubArrays.ADDRIN+4(A0)
  345.         MOVE.W  #SHEL_ENVRN,(A3)+
  346.         JSR     aes_if
  347.         MOVE.L  (A7),A7         ; String vom Stack schmeißen
  348.         JSR     testINTOUT0
  349.   END;
  350. END ShellEnvironment;
  351.  
  352.  
  353. END AESMisc.
  354.